ALB のヘルスチェックが “Request timed out” で失敗する原因と対処法を教えてください

ALB のヘルスチェックが “Request timed out” で失敗する原因と対処法を教えてください

ALB のヘルスチェックが失敗するときは、まずここを確認しましょう。
Clock Icon2022.06.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ALB(Application Load Balancer)を構築しましたが、ターゲットグループのヘルスチェックステータスが unhealthy となり、詳細に "Request timed out" と表示されています。 これを解決するには、どの設定を確認すればよいでしょうか?

どう対応すればいいの?

上記のメッセージは ALB からターゲット EC2 へ送信されるヘルスチェックのリクエストが、タイムアウトで失敗していることを示します。

原因はいくつか考えられますが、弊社へのお問い合わせで多く見られるケースとして、ALB と ターゲット EC2 に紐づいたセキュリティグループの設定が適切でない可能性があります。
以下の例をもとに確認してみましょう。

まずは ALB のターゲットグループの詳細画面で、ターゲット EC2 への接続プロトコルとポートを確認すると「HTTP:80」に設定されています。

つまり今回の場合、ALB と ターゲット EC2 間で疎通を確保するには、以下の条件を満たしている必要があります。

  • ALB 側のセキュリティグループ設定
    アウトバウンド(送信)で EC2 への HTTP:80 アクセスが許可されている
  • EC2 側のセキュリティグループ設定
    インバウンド(受信)で ALB からの HTTP:80 アクセスが許可されている

上記の条件を満たしているか、まずは ALB 側のセキュリティグループのアウトバウンドルールを確認してみましょう。

EC2 を含むすべての送信先(0.0.0.0/0)に対して HTTP:80 の通信が許可されているため、問題なさそうです。

続いて EC2 側のセキュリティグループのインバウンドルールを確認してみましょう。

HTTP:80 のアクセスを許可するルールが無く、特定IPアドレスからの SSH:22 のアクセスのみが許可されています。
どうやらこれが原因のようです。

ALB からのインバウンドアクセスを許可するには、以下のいずれかを含んだルールを追加しましょう。

  • ALB に紐づいたセキュリティグループからの HTTP:80 を許可するルール
  • ALB と EC2 インスタンスの両方に紐づいたサブネットの CIDR 範囲からの HTTP:80 を許可するルール

今回は前者のパターンで、ALB に紐づいたセキュリティグループからのアクセスを許可するルールを追加します。

ルールを追加してしばらく待つと、ヘルスチェックが healthy 状態になりました。

上記は一例ですが、ALB の初期設定でつまづく要因としてセキュリティグループの設定が関連している事例は多く見られるので、まずはこの点に問題がないか確認しましょう。

もし上記を確認しても unhealthy になる場合は他の要因(EC2 内部の問題)も考えられるため、下記のブログも参考にしてみてください。

【参考】ALB のヘルスチェックが “Health checks failed with thise codes:[XXX]” で失敗する原因と対処法を教えてください | DevelopersIO

この情報がどなたかのお役に立てれば幸いです!

参考資料

ターゲットグループのヘルスチェック - Elastic Load Balancing

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.